package com.fast.alden.data.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.Column;
import jakarta.persistence.Lob;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Getter
@Setter
@MappedSuperclass
public abstract class BaseUser extends BaseEntity {
    /**
     * 用户名
     */
    @Column(unique = true)
    private String username;
    /**
     * 密码，只可反序列化不可序列化，即返回给前端的json串不含此属性
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
    /**
     * 昵称
     */
    private String nickname;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 电话
     */
    private String phone;
    /**
     * 生日
     */
    private LocalDate birthday;
    /**
     * 个人介绍
     */
    @Lob
    @Column(columnDefinition = "longtext")
    private String introduce;
    /**
     * 头像，以base64编码字符串存储
     * todo: warning: @Lob在mysql会转化为tinytext，不足以存储一个头像的图片，所以先指定字段类型为text
     * env: win11, Java21, MySQL 5.7.21, Spring Boot 3.1.2
     */
    @Lob
    @Column(columnDefinition = "longtext")
    private String avatar;
    /**
     * 用户状态，0-停用，1-正常
     */
    private Integer status;
    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;
    /**
     * 最后登录IP
     */
    private String lastLoginIp;
}
